package main

import "fmt"

func main() {
	// 类型在括号的后面，数量在类型的前面
	var arr1 [5]int
	// := 必须吧数组初始化
	arr2 := [3]int{1, 3, 4}
	// ... 就是让编译器自己确定个数
	arr3 := [...]int{2, 4, 6, 8, 10}
	//4个长度为5的二维数组
	var grid [4][5]int

	fmt.Println(arr1, arr2, arr3)
	fmt.Println(grid)
	fmt.Println("for i 循环")
	for i, length := 0, len(arr3); i < length; i++ {
		fmt.Print(arr3[i], " ")
	}
	fmt.Println("只要数值")
	for i := range arr1 {
		fmt.Print(i)
	}
	fmt.Println("要下标和数值")
	for i, v := range arr3 {
		fmt.Println(i, v)
	}

	printArr(arr3[:])
	printArr(arr1[:])
	fmt.Println(arr3, arr1)
	printArrPointer(arr3[:])
	fmt.Println(arr3)
}

// 得到最大值
func getMaxValue(arr [5]int) (int, int) {
	maxi := -1
	maxValue := -1
	for i, v := range arr {
		if v > maxValue {
			maxi, maxValue = i, v
		}
	}
	return maxi, maxValue
}

// 遍历求和
func getSum(arr []int) int {
	var sum = 0
	for _, v := range arr {
		sum += v
	}
	return sum
}

// 为什么要用range
// 1 意义明确，简洁美观
// 2 c++：没有类似能力
// 3 Java/Python：只能for each value, 不能同时获取i,v

// 数组是值类型
func printArr(arr []int) {
	arr[0] = 100
	for i, v := range arr {
		fmt.Println(i, v)
	}
}

func printArrPointer(arr []int) {
	arr[0] = 100
	for i, v := range arr {
		fmt.Println(i, v)
	}
}
